package fr.afcepf.ai89.esharing.data;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import fr.afcepf.ai89.esharing.entity.InvisibiliteAem;
import fr.afcepf.ai89.esharing.entity.InvisibiliteProprietaire;
import fr.afcepf.ai89.esharing.entity.Proprietaire;

@Stateless
public class DAOInvisibiliteProprietaire implements
		IDAOInvisibiliteProprietaire {

	@PersistenceContext(unitName = "ESharingPhase22")
	EntityManager em;
	
	@Override
	public InvisibiliteProprietaire getInvisProp(int idInvisProp) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<InvisibiliteProprietaire> getInvisProp() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public List<InvisibiliteProprietaire> getInvisProp(Proprietaire prop) {
		
		Query hql = em.createQuery("SELECT ip FROM InvisibiliteProprietaire ip WHERE ip.proprietaire.idUtilisateur = :param");
		
		hql.setParameter("param", prop.getIdUtilisateur());
		List<InvisibiliteProprietaire> invis = (List<InvisibiliteProprietaire>)hql.getResultList();
		
		return invis;
		
	}

	@Override
	public int addInvisProp(InvisibiliteProprietaire invisProp) {
		
		em.persist(invisProp);
		
		Query hql = em.createQuery("SELECT MAX(idInvisibiliteProp) FROM InvisibiliteProprietaire ip");
		int idInv = (Integer)hql.getSingleResult();
		
		return idInv;
		
	}

	@Override
	public int majInvisProp(InvisibiliteProprietaire invisProp) {
		
		InvisibiliteProprietaire newInvis = em.find(InvisibiliteProprietaire.class, invisProp.getIdInvisibiliteProp());
		
		newInvis.setDateDebutInvisibiliteProp(invisProp.getDateDebutInvisibiliteProp());
		newInvis.setDateFinInvisibiliteProp(invisProp.getDateFinInvisibiliteProp());
		
		em.merge(newInvis);
		return newInvis.getIdInvisibiliteProp();
		
	}

	@Override
	public int retirerInvisProp(InvisibiliteProprietaire invisProp) {

		InvisibiliteProprietaire newInvis = em.find(InvisibiliteProprietaire.class, invisProp.getIdInvisibiliteProp());
		
		newInvis.setDateRetraitInvisibiliteProp(invisProp.getDateRetraitInvisibiliteProp());
		
		em.merge(newInvis);
		return newInvis.getIdInvisibiliteProp();
		
	}

}
